Testing Fault-Tolerant Protocols by a Fault Injection Loop



Yinong Chen and Klaus Echtle
Univ. Karlsruhe, Institut fur Rechnerentwurf und Fehlertoleranz,
D 7500 Karlsruhe, F. R. Germany

Abstract


Protocols are well-known as an effective means for implementing fault tolerance
in distributed systems. A number of approaches in this area have been
investigated. Since even existing protocols turned out to be rather complex, a
stress should be put on methods showing their correctness. Although formal
verification is desirable, practical run time reasons limit its applicability
to a small number of nodes, protocol actions, and fault cases.

The purpose of this work is to develop a test tool with sophisticated fault
injection. This must not be confused with the injection of realistic faults. For
test purposes the faults to be injected must be chosen such that
they make a design error of a given protocol obvious if there is any. Similar to
software testing, we aim at a test tool that will cover every possible branch in
the protocol program, and every possible communication path between the nodes
involved in the protocol. This goal is achieved by combination of a static
branch analysis and a dynamic learning procedure for appropriate fault injection
during protocol execution, called the fault injection loop: Generation of
different fault cases in the message transfer between nodes provides test data
for the local program part in the receiving node; after examination of the
program branches covered by previous fault injection, the next fault to be
injected is determined in order to cover some of the remaining branches. Static
analysis will assure a high coverage of the branches, and dynamic learning will
decrease both time and space complexity of protocol testing.